package de.gof.ppstool.fertigungsverwaltung.db;

import static EAGER;
import java.io.Serializable;
import javax.persistence.*;
import de.gof.ppstool.lagerverwaltung.db.Arbeitsplatz;
import java.util.List;

/**
 * The persistent class for the fertigungsauftrag database table.
 */
@Entity
@Table(name = "fertigungsauftrag")
@NamedQueries({
		@NamedQuery(name = Fertigungsauftrag.FINDE_ALLE_FERTIGUNGSAUFTRAEGE, query = "SELECT DISTINCT f FROM Fertigungsauftrag f LEFT JOIN FETCH f.fertigungsauftragspositionen"),
		@NamedQuery(name = Fertigungsauftrag.FINDE_FERTIGUNGSAUFTRAG_NACH_FERTIGUNGSAUFTRAG_ID, query = "SELECT DISTINCT f FROM Fertigungsauftrag f WHERE f.fertigungsauftragId = :"
				+ Fertigungsauftrag.PARAM_FERTIGUNGSAUFTRAG_ID),
		@NamedQuery(name = Fertigungsauftrag.FINDE_FERTIGUNGSAUFTRAEGE_NACH_AUFTRAGSTAG, query = "SELECT DISTINCT f FROM Fertigungsauftrag f LEFT JOIN FETCH f.fertigungsauftragspositionen "
				+ "WHERE f.tagdesauftrags = :"
				+ Fertigungsauftrag.PARAM_FERTIGUNGSAUFTRAG_TAGDESAUFTAGS),
		@NamedQuery(name = Fertigungsauftrag.FINDE_FERTIGUNGSAUFTRAG_NACH_BEMERKUNG, query = "SELECT f FROM Fertigungsauftrag f WHERE f.bemerkung = :"
				+ Fertigungsauftrag.PARAM_FERTIGUNGSAUFTRAG_BEMERKUNG) })
public class Fertigungsauftrag implements Serializable {
	private static final long serialVersionUID = -3822512061800285309L;
	/**
	 * +++++++++++++++++++++++++++++++++++++++
	 * ++++ Felder fuer NamedQueries +++++++++
	 * +++++++++++++++++++++++++++++++++++++++
	 */
	static final String FINDE_ALLE_FERTIGUNGSAUFTRAEGE = "findeAlleFertigungsauftraege";
	static final String FINDE_FERTIGUNGSAUFTRAEGE_NACH_AUFTRAGSTAG = "findeFertigungsauftraegeNachAuftragstag";
	static final String FINDE_FERTIGUNGSAUFTRAG_NACH_FERTIGUNGSAUFTRAG_ID = "findeFertigungsauftragNachId";
	static final String FINDE_FERTIGUNGSAUFTRAG_NACH_BEMERKUNG = "findeFertigungsauftragNachBemerkung";
	static final String PARAM_FERTIGUNGSAUFTRAG_ID = "fertigungsauftrag_id";
	static final String PARAM_FERTIGUNGSAUFTRAG_TAGDESAUFTAGS = "tagdesauftrags";
	static final String PARAM_FERTIGUNGSAUFTRAG_BEMERKUNG = "bemerkung";
	/**
	 * ++++++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Attribute der Klasse Fertigungsauftrag +++
	 * ++++++++++++++++++++++++++++++++++++++++++++++++
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "fertigungsauftrag_sequence_name")
	@SequenceGenerator(name = "fertigungsauftrag_sequence_name", sequenceName = "fertigungsauftrag_fertigungsauftrag_id_seq", allocationSize = 1)
	@Column(unique = true, nullable = false, name = "fertigungsauftrag_id")
	private Long fertigungsauftragId;
	@Column(length = 2147483647)
	private String tagdesauftrags;
	@OneToOne
	@JoinColumn(name = "arbeitsplatz_id")
	private Arbeitsplatz arbeitsplatz;
	@Column(name = "zeitbedarf")
	private String zeitbedarf;
	@Column(name = "interneauftrags_id")
	private String interneAuftragsId;
	//bi-directional many-to-one association to Fertigungsauftragsposition
	@OneToMany(fetch = EAGER, mappedBy = "fertigungsauftrag", cascade = {
			CascadeType.PERSIST, CascadeType.REMOVE })
	@OrderBy("fertigungsauftragspositonId ASC")
	private List<Fertigungsauftragsposition> fertigungsauftragspositionen;
	@ManyToOne
	@JoinColumn(name = "warteschlangenauftraege")
	private Arbeitsplatz inWarteschlange;
	@Column(length = 2147483647)
	private String bemerkung;
	@Column(length = 2147483647)
	private String ersteslos;
	@Column(length = 2147483647)
	private String letzteslos;
	@Column(length = 2147483647)
	private String losgroesse;

	/**
	 * ++++++++++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Konstruktoren der Klasse Fertigungsauftrag +++
	 * ++++++++++++++++++++++++++++++++++++++++++++++++++++
	 */
	public Fertigungsauftrag() {
		super();
	}

	public Fertigungsauftrag(String tagdesauftrags, Arbeitsplatz arbeitsplatz,
			String zeitbedarf, String interneAuftragsId,
			List<Fertigungsauftragsposition> fertigungsauftragspositionen,
			String bemerkung, String ersteslos, String letzteslos,
			String losgroesse) {
		super();
		this.tagdesauftrags = tagdesauftrags;
		this.arbeitsplatz = arbeitsplatz;
		this.zeitbedarf = zeitbedarf;
		this.interneAuftragsId = interneAuftragsId;
		this.fertigungsauftragspositionen = fertigungsauftragspositionen;
		this.bemerkung = bemerkung;
		this.ersteslos = ersteslos;
		this.letzteslos = letzteslos;
		this.losgroesse = losgroesse;
	}

	public Long getFertigungsauftragId() {
		return fertigungsauftragId;
	}

	public void setFertigungsauftragId(Long fertigungsauftragId) {
		this.fertigungsauftragId = fertigungsauftragId;
	}

	/**
	 * +++++++++++++++++++++++++++++	
	 * +++++ Getter und Setter +++++
	 * +++++++++++++++++++++++++++++
	 */
	public Arbeitsplatz getArbeitsplatz() {
		return arbeitsplatz;
	}

	public void setArbeitsplatz(Arbeitsplatz arbeitsplatz) {
		this.arbeitsplatz = arbeitsplatz;
	}

	public String getTagdesauftrags() {
		return this.tagdesauftrags;
	}

	public void setTagdesauftrags(String tagdesauftrags) {
		this.tagdesauftrags = tagdesauftrags;
	}

	public String getZeitbedarf() {
		return zeitbedarf;
	}

	public void setZeitbedarf(String zeitbedarf) {
		this.zeitbedarf = zeitbedarf;
	}

	public String getInterneAuftragsId() {
		return interneAuftragsId;
	}

	public void setInterneAuftragsId(String interneAuftragsId) {
		this.interneAuftragsId = interneAuftragsId;
	}

	public List<Fertigungsauftragsposition> getFertigungsauftragspositionen() {
		return this.fertigungsauftragspositionen;
	}

	public void setFertigungsauftragspositionen(
			List<Fertigungsauftragsposition> fertigungsauftragspositionen) {
		this.fertigungsauftragspositionen = fertigungsauftragspositionen;
	}

	public Arbeitsplatz getInWarteschlange() {
		return inWarteschlange;
	}

	public void setInWarteschlange(Arbeitsplatz inWarteschlange) {
		this.inWarteschlange = inWarteschlange;
	}

	public String getBemerkung() {
		return bemerkung;
	}

	public void setBemerkung(String bemerkung) {
		this.bemerkung = bemerkung;
	}

	public void setErsteslos(String ersteslos) {
		this.ersteslos = ersteslos;
	}

	public String getErsteslos() {
		return ersteslos;
	}

	public void setLetzteslos(String letzteslos) {
		this.letzteslos = letzteslos;
	}

	public String getLetzteslos() {
		return letzteslos;
	}

	public void setLosgroesse(String losgroesse) {
		this.losgroesse = losgroesse;
	}

	public String getLosgroesse() {
		return losgroesse;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((bemerkung == null) ? 0 : bemerkung.hashCode());
		result = prime
				* result
				+ ((fertigungsauftragId == null) ? 0 : fertigungsauftragId
						.hashCode());
		result = prime
				* result
				+ ((interneAuftragsId == null) ? 0 : interneAuftragsId
						.hashCode());
		result = prime * result
				+ ((tagdesauftrags == null) ? 0 : tagdesauftrags.hashCode());
		result = prime * result
				+ ((zeitbedarf == null) ? 0 : zeitbedarf.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;

		if (obj == null)
			return false;

		if (getClass() != obj.getClass())
			return false;

		Fertigungsauftrag other = (Fertigungsauftrag) obj;
		if (bemerkung == null) {
			if (other.bemerkung != null)
				return false;

		} else if (!bemerkung.equals(other.bemerkung))
			return false;

		if (fertigungsauftragId == null) {
			if (other.fertigungsauftragId != null)
				return false;

		} else if (!fertigungsauftragId.equals(other.fertigungsauftragId))
			return false;

		if (interneAuftragsId == null) {
			if (other.interneAuftragsId != null)
				return false;

		} else if (!interneAuftragsId.equals(other.interneAuftragsId))
			return false;

		if (tagdesauftrags == null) {
			if (other.tagdesauftrags != null)
				return false;

		} else if (!tagdesauftrags.equals(other.tagdesauftrags))
			return false;

		if (zeitbedarf == null) {
			if (other.zeitbedarf != null)
				return false;

		} else if (!zeitbedarf.equals(other.zeitbedarf))
			return false;

		return true;
	}

	@Override
	public String toString() {
		return "Fertigungsauftrag [fertigungsauftragId=" + fertigungsauftragId
				+ ",bemerkung=" + bemerkung + ", interneAuftragsId="
				+ interneAuftragsId + ", tagdesauftrags=" + tagdesauftrags
				+ ", zeitbedarf=" + zeitbedarf + ", ersteslos=" + ersteslos
				+ ", letzteslos=" + letzteslos + ", losgroesse=" + losgroesse
				+ "]";
	}

}
